/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.ucb.game8numbers.util;

import br.com.ucb.game8numbers.bean.Point;
import br.com.ucb.game8numbers.enums.EnumValues;
import br.com.ucb.game8numbers.service.DataResponsible;
import br.com.ucb.game8numbers.service.win.WinGame;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author robs
 */
public final class Utils {
    
//   public static void changePositionAlterDataResponsible(DataResponsible dr, Integer posOrigem, Integer posDestino)
//   {
//       changePosition(dr.getValues(), posOrigem, posDestino);
//       dr.setMovimentQuantity(dr.getMovimentQuantity()+1);
//       dr.notifyObservers();
//   }
//
//   public static String[] changePositionWithoutAlterDataResponsible(DataResponsible dr, Integer posOrigem, Integer posDestino)
//   {
//        String[] values = Arrays.copyOf(dr.getValues(), dr.getValues().length);
//        changePosition(values, posOrigem, posDestino);
//        return values;
//   }
//
//   private static void changePosition(String[] values, Integer posOrigem, Integer posDestino)
//   {
//       String valueOrigem = values[posOrigem];
//       values[posOrigem] = values[posDestino] ;
//       values[posDestino] = valueOrigem;
//   }
//
//   public static boolean isTextNullOrEmpty(DataResponsible dr, Integer pos)
//   {
//       String text = getText(getStringAtualValues(dr),pos);
//       if(text != null && !text.isEmpty())
//       {
//           return false;
//       }
//       return true;
//   }

   public static Point getEmptyPoint(String[][] state)
   {
       for (int i = 0; i < state.length; i++) {
           for (int j = 0; j < state[i].length; j++) {
               if(state[i][j].equals(EnumValues.VAZIO.getText()))
               {
                   return new Point(i, j);
               }
           }
       }
       return null;
   }

//    public static int getIntValue(DataResponsible dr, Integer pos) {
//        return getIntValue(getText(dr.getValues(), pos));
//    }
//
//    public static int getIntValue(String text) {
//        return EnumValues.getValueByText(text);
//    }

    public static String[][] getInitialValues() {
        return WinGame.matrizResultado;
    }
//
//    public static int[] getIntValues(String[] strValues)
//    {
//        int intValues[] = {getIntValue(strValues[0]),
//                           getIntValue(strValues[1]),
//                           getIntValue(strValues[2]),
//                           getIntValue(strValues[3]),
//                           getIntValue(strValues[4]),
//                           getIntValue(strValues[5]),
//                           getIntValue(strValues[6]),
//                           getIntValue(strValues[7]),
//                           getIntValue(strValues[8])
//                          };
//        return intValues;
//    }
//
//    public static String[] getStringAtualValues(DataResponsible dr) {
//        return dr.getValues();
//    }
//
//    public static int[] getIntAtualValues(DataResponsible dr)
//    {
//        return getIntValues(getStringAtualValues(dr));
//    }
//
//    public static void move(DataResponsible dr, Movement moviment) {
//        changePositionAlterDataResponsible(dr, moviment.getSource(), moviment.getDestination());
//        try {
//            Thread.sleep(400);
//        } catch (InterruptedException ex) {
//            Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex);
//        }
//    }
//
//    private static String getText(String[] stringValues, Integer pos) {
//        return stringValues[pos];
//    }
//
//    public static int getQuantityValuesOutOfPlace(DataResponsible dr, Movement m1) {
//        String []values = changePositionWithoutAlterDataResponsible(dr, m1.getSource(), m1.getDestination());
//        return getQuantityValuesOutOfPlace(getIntValues(values));
//    }
//
//    public static int getQuantityValuesOutOfPlace(DataResponsible dr) {
//        int[] matriz =  getIntValues(dr.getValues());
//        return getQuantityValuesOutOfPlace(getIntValues(dr.getValues()));
//    }

    public static int getQuantityValuesOutOfPlace(String[][] state) {
        int qtd = 0;
        String[][] resultState = WinGame.matrizResultado;

        for (int i=0; i < resultState.length; i++) {
            for (int j = 0; j < resultState[i].length; j++) {
                if(!resultState[i][j].equals(state[i][j]))
                {
                    qtd++;
                }

            }
        }

        return qtd;
    }

    public static void notifyEndGame(DataResponsible fornecedor) {
        fornecedor.notifyEndGame();
    }
}
